Plug leak of destroyed subviews, fixes bug #504753.
authorRichard Hult <richard@imendio.com>
Fri, 21 Dec 2007 20:21:05 +0000 (20:21 +0000)
committerRichard Hult <rhult@src.gnome.org>
Fri, 21 Dec 2007 20:21:05 +0000 (20:21 +0000)
2007-12-21  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkwindow-quartz.c: (_gdk_windowing_window_destroy):
Plug leak of destroyed subviews, fixes bug #504753.

svn path=/trunk/; revision=19218

ChangeLog
gdk/quartz/gdkwindow-quartz.c

index 267143aa64db63bf36e050b3cd581ff7072540c3..323fe47e5c431cad5be1e1c43f28ddb4f6109d52 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-21  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkwindow-quartz.c: (_gdk_windowing_window_destroy):
+       Plug leak of destroyed subviews, fixes bug #504753.
+
 2007-12-20  Johan Dahlin  <johan@gnome.org>
 
        * tests/Makefile.am (TEST_PROGS): 
index fba383374d0898dbde749ee844d5263e0ab68956..f57f51ed9db897ead70318669c4700fe74313743 100644 (file)
@@ -882,6 +882,7 @@ _gdk_windowing_window_destroy (GdkWindow *window,
   GdkWindowObject *private;
   GdkWindowImplQuartz *impl;
   GdkWindowObject *parent;
+  GdkWindow *mouse_window;
 
   private = GDK_WINDOW_OBJECT (window);
   impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
@@ -909,24 +910,21 @@ _gdk_windowing_window_destroy (GdkWindow *window,
   if (window == _gdk_quartz_keyboard_grab_window)
     gdk_keyboard_ungrab (0);
 
-  if (!recursing && !foreign_destroy)
-    {
-      GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
-      GdkWindow *mouse_window;
+  _gdk_quartz_drawable_finish (GDK_DRAWABLE (impl));
 
-      mouse_window = _gdk_quartz_events_get_mouse_window (FALSE);
-      if (window == mouse_window ||
-          _gdk_quartz_window_is_ancestor (window, mouse_window))
-        _gdk_quartz_events_update_mouse_window (_gdk_root);
+  mouse_window = _gdk_quartz_events_get_mouse_window (FALSE);
+  if (window == mouse_window ||
+      _gdk_quartz_window_is_ancestor (window, mouse_window))
+    _gdk_quartz_events_update_mouse_window (_gdk_root);
 
+  if (!recursing && !foreign_destroy)
+    {
       GDK_QUARTZ_ALLOC_POOL;
 
-      _gdk_quartz_drawable_finish (GDK_DRAWABLE (impl));
-
       if (impl->toplevel)
        [impl->toplevel close];
       else if (impl->view)
-       [impl->view release];
+       [impl->view removeFromSuperview];
 
       GDK_QUARTZ_RELEASE_POOL;
     }
@@ -2898,9 +2896,6 @@ gdk_window_configure_finished (GdkWindow *window)
 void
 gdk_window_destroy_notify (GdkWindow *window)
 {
-  /* FIXME: Implement. We should call this from -[GdkQuartzWindow dealloc] or
-   * -[GdkQuartzView dealloc], although I suspect that currently they leak
-   * anyway. */
 }
 
 void